#ifndef SOCKET_H_
#define SOCKET_H_

#define BACKLOG 5
#define BUFFER_LEN 2048


#include <pthread.h>
#include <stdio.h>
#include <stdlib.h>
#include <errno.h>
#include <string.h>
#include <iostream>
#include <unistd.h>
#include <netdb.h>
#include <arpa/inet.h>
#include <sys/types.h>
#include <string>
#include <iostream>
#include <list>

using namespace std;


class Socket {
private:
	int localSocket;
	int remoteSocket;
	int socketId;
	int puerto;
	struct sockaddr_in localDir;
	struct sockaddr_in remoteDir;
	struct hostent *he;

public:
	Socket();
	/* Constructor para crear un socket a partir de uno existente */
	Socket(Socket *s);
	
	/* Constructor para usar el socket como servidor */
	Socket(int puerto);
	
	/* Constructor para usar el socket como cliente */
	Socket(string host, int puerto);
	
	virtual ~Socket();
	
	void enviar(string msg);
	
	string recibir();
	Socket* aceptarConexiones();
	
	int getLocalSocket();
	
	int getRemoteSocket();
	int getSocketId();
};

#endif /*COMMON_SOCKET_H_*/
